Programmable devices, such as FPGAs, typically include thousands of programmable logic cells that use combinations of logic gates and/or look-up tables to perform logic operations. Programmable devices also include a number of functional blocks having specialized logic devices adapted to specific logic operations, such as adders, multiply and accumulate circuits, phase-locked loops, and embedded memory blocks.
Embedded memory blocks may be important components in programmable devices. Embedded memory blocks can allow for bulk data storage within the device without the need for time-consuming off-device memory accesses. In some programmable devices, the embedded memory blocks may be organized into two different memory types, such as configuration flash memory (CFM) and user flash memory (UFM). In these devices, the CFM is used to store configuration bit streams (also referred to as configuration bits or configuration data) that are used to configure an IC device. The UFM is used to store user data and other information. In a conventional embedded memory scheme where memory capacity is fixed, a preset amount of memory may be allocated to CFM and UFM.
However, in some instances, configuration data may be compressed to reduce memory storage requirements and configuration time. A compression ratio may be used in order to determine the amount of memory required to store the configuration bits in the CFM. Because different circuit designs will have different configuration bits, compression ratios for the configuration bits may vary. This variability, however, may result in under-utilized memory within the preset-size CFM, which wastes memory resource space that could be used as additional UFM storage.